Openwrt Clion 环境配置指南

因为 openwrt对 golang 支持不佳,被迫写C,所以不得已使用 Clion 来对印度人的开源项目进行二次开发,印度人的项目使用的管理工具是 autoconf ,而 Clion 对 autoconf的支持实在不行,在经历了三个月纯粹把IDE当成 “有全局查找功能的编辑器” 后,忍无可忍 ,就有了创建独立于老代码的新项目,然后在老代码里引用新项目动态库的想法。

Clion 给 Openwrt 开发软件,首先得给 Clion配置上 openwrt的工具链,以 linux 上的 Clion为例 , 在 setting -> Build,Execution,Deployment-> ToolChains 里,添加一个配置,把 Clion 所使用的 CMakegccg++配置为openwrt所用的版本 ,CMake 的目录一般在

1
${openwrt_dir}/staging_dir/host/bin/CMake

gcc以及g++ 一般在

1
${openwrt_dir}/staging_dir/toolchain-${arch}_gcc_${version}/bin/${arch}-openwrt-linux-${version}-<gcc/g++>

这样我们就配置好了 Clion所使用的编译器。

之后我们创建的项目是给 openwrt 创建的,所以需要用到 openwrt的动态库以及头文件。当你使用Clion来创建一个新项目的时候,会自动生成一个 CMakeLists.txt ,我们可以在这里做配置。因为我这里用的是老版本的 CMake 功能并不完全 , 所以需要预定义好:

1
2
3
4
SET(CMAKE_FIND_LIBRARY_PREFIXES
"lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES
".so" ".a")

然后再定义我们头文件的目录:

1
include_directories(${openwrt_dir}/staging_dir/target-${arch}_${version}/usr/include)

定义我们所需的动态库的目录:

1
link_directories(${openwrt_dir}/staging_dir/target-${arch}_${version}/usr/lib)

定义好我们软件所需要的库

1
2
SET(LIBS
ubox ubus uci json-c blobmsg_json sqlite3)

然后把库与我们的执行程序链接在一起:

1
2
add_executable(my_program main.c)
TARGET_LINK_LIBRARIES(my_program ${LIBS})

如果我们要编译的是一个动态库的话:

1
2
add_library(my_libs libs.c)
TARGET_LINK_LIBRARIES(my_libs ${LIBS})

这样,我们就拥有了一个在本机上编译目标openwrt平台软件的环境了。关于 CMake的软件开发及配置方法请自行参考资料,不做赘述。